package cn.genmer.test.security.netty.nio;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @program:  了解流，channel、buffer的关系， 内容通过流，写入buffer，写入channel, 就完成了写入。
 * @description:
 * @author: Genmer
 * @create: 2021-09-04 22:15
 **/
public class Channel1 {
    public static void main(String[] args) throws IOException {
        String str = "Hello Genmer!";

        // 创建一个输出流
        FileOutputStream fileOutputStream = new FileOutputStream("/Users/genmersmbp/Documents/Codes/tmp/channel1.txt");

        // 获得channel - 如果channel实例为空，会实例化一个FileChannelImpl - 方法内部一个synchronized的大括号
        FileChannel channel = fileOutputStream.getChannel();

        // 创建缓冲区
        ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
        // 数据放入缓冲区
        byteBuffer.put(str.getBytes());

        // 翻转缓冲区 - 因为之前数据写入缓冲区position位置到了11的位置，需要重新置为0和重新设置了可输出字节（limit）才能正确写入channel
        byteBuffer.flip();

        // 把buffer数据写入channel
        channel.write(byteBuffer);

        fileOutputStream.close();

        char[] a = null;
        int aa = a.length;
    }
}
